﻿using Pe.Petecos.Comercial.Aplicacion.Core.Base;
using Pe.Petecos.Comercial.Aplicacion.Core.ServiceContract;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Ventas;
using Pe.Petecos.Comercial.Cross.Core.Constantes;
using Pe.Petecos.Comercial.Presentacion.Core.Controllers.Base;
using Pe.Petecos.Comercial.Presentacion.Core.Security;
using Pe.Petecos.Comercial.Presentacion.Core.ViewModel.Ventas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace Pe.Petecos.Comercial.Presentacion.Core.Controllers.Ventas
{
    public class AdministrarProyectoController : GenericController
    {
        public IGeneralService generalService { get; set; }
        public IVentasService ventasService { get; set; }

        #region Action
        /// /// <summary>
        /// Muestra la vista principal
        /// </summary>
        /// <returns>Vista principal de la opción</returns>
        public ActionResult Index()
        {
            var result = generalService.BuscarOpcion(DatosConstantes.Parametro.EstadoProyecto).Result;
            var model = new AdministrarProyectoBusquedaModel(result);

            return View(model);
        }

        /// <summary>
        /// Muestra el formulario de datos
        /// </summary>
        /// <returns>Vista FormularioRegistro</returns>
        public ActionResult FormularioRegistro(int codigo)
        {
            var tiposEvento = generalService.BuscarOpcion(DatosConstantes.Parametro.TipoEvento).Result;
            var monedas = generalService.BuscarOpcion(DatosConstantes.Parametro.Moneda).Result;
            var modelo = new AdministrarProyectoRegistroModel(tiposEvento, monedas);

            if (codigo > 0)
            {
                var proyecto = ventasService.ObtenerProyecto(codigo).Result;
                modelo.Proyecto = proyecto;
            }

            return View(modelo);
        }

        #endregion
        
        #region Json

        public JsonResult Buscar(FiltroProyecto filtro)
        {
            var resultado = ventasService.BuscarProyecto(filtro);
            return Json(resultado);
        }

        public JsonResult Registrar(DataProyecto proyecto)
        {
            var currentAccount = HttpSessionContext.CurrentAccount();
            proyecto.UsuarioCreacion = currentAccount.Cuenta;
            proyecto.UsuarioModificacion = currentAccount.Cuenta;

            var resultado = ventasService.RegistrarProyecto(proyecto);
            return Json(resultado);
        }

        public JsonResult PreAprobar(List<int> codigos)
        {
            ProcessResult<List<int>> resultado = new ProcessResult<List<int>>();

            var currentAccount = HttpSessionContext.CurrentAccount();

            if (currentAccount.CodigoPerfil == DatosConstantes.Perfil.Administrador || currentAccount.CodigoPerfil == DatosConstantes.Perfil.PreAprobador)
            {
                resultado = ventasService.ModificarEstadoProyecto(codigos, DatosConstantes.EstadoProyecto.PreAprobado, currentAccount.Cuenta);
            }
            else
            {
                resultado.CodeResult = -1;
            }


            return Json(resultado);
        }

        public JsonResult Aprobar(List<int> codigos)
        {

            ProcessResult<List<int>> resultado = new ProcessResult<List<int>>();

            var currentAccount = HttpSessionContext.CurrentAccount();

            if (currentAccount.CodigoPerfil == DatosConstantes.Perfil.Administrador || currentAccount.CodigoPerfil == DatosConstantes.Perfil.Aprobador)
            {
                resultado = ventasService.ModificarEstadoProyecto(codigos, DatosConstantes.EstadoProyecto.Aprobado, currentAccount.Cuenta);
            }
            else
            {
                resultado.CodeResult = -1;
            }

            return Json(resultado);
        }

        public JsonResult ValidarItemsProyecto(FiltroProyecto filtro)
        {
            var resultado = ventasService.ValidarItemsProyecto(filtro.CodigoProyecto, filtro.CodigoArticuloProveedor);
            return Json(resultado);
        }

        #endregion

        #region File
        public FileResult Exportar(int codigo)
        {
            var archivo = ventasService.GenerarDocumentoProyecto(codigo, "EXCELOPENXML");
            var nombre = "proyecto" + DateTime.Now.ToString("_ddMMyyyy_hhmmss") + ".xlsx";
            return File(archivo.Result, System.Net.Mime.MediaTypeNames.Application.Octet, nombre);
        }
        #endregion
    }
}
